/*
 * Esta clase debe contener los metodo insert, delete, update y Find conectados a la Interfase.
 * Para ello extiende como super clase Beans, que contiende todos los atributos de la tabla
 * De requerirse algun atributo que no lo contemple Beas, este debe ser creado aquí
 * 
 */
package system.mail_configuration;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.el.ELContext;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import system.general.*;

/**
 *
 * @author emojica
 */
@ManagedBean(name = "system_mail_config")
@RequestScoped
public class Main extends Beans {

    Logged logged;
    private Persistencia persistencia = new Persistencia();
    private Cryptography crypto = new Cryptography();
    private Find mail_configFind = new Find();
    private List<person.general.Beans> person_generalList = new ArrayList<>();
    private List<Beans> mail_configList = new ArrayList<>();
    private String sql;
    private Map<String, String> map = new LinkedHashMap<>();
    private system.general.Message msg = new system.general.Message();

    public Main() {
        ELContext elContext = FacesContext.getCurrentInstance().getELContext();
        logged = (Logged) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "logged");
        namePackage();
        load();
    }

    /**
     * Método utilizado para desplegar la información de un resitro que ha sido
     * seleccionado. Para ello requiere que el id del registro haya sido
     * asignado a la variable RecordId del logged. En este caso particular, el
     * usuario es localizado por el id_persona.
     */
    private void load() {
        try {
            //Verifica si hay un registro seleccionado
            map.clear();
            map.put("id = 1 ", " ");
            if (!mail_configFind.byExist(map)) {
                throw new Exc("m5");
            }
            mail_configList.clear();
            map.clear();
            map.put("id = 1 ", " ");
            mail_configList = mail_configFind.byMap(map);
            if (mail_configList.isEmpty()) {
                return;
            }
            setCorreo(mail_configList.get(0).getCorreo());
            setClave(mail_configList.get(0).getClave());
            setPuerto(mail_configList.get(0).getPuerto());
        } catch (Exception ex) {
            msg.showErr(namePackage(), "java", ex);
        } finally {
        }
    }

    /**
     * Método utilizado para INSERTAR O ACTUALIZAR un registro. Para ello
     * requiere que el id del registro haya sido asignado a la variable RecordId
     * del logged. En este caso en particular, el usuario es localizado por el
     * id_persona.
     */
    public void update() {
        try {


            //Verifica si el usuario ha sido creado para la persona y lo actualiza
            //de lo contrario inserta el registro
            map.clear();
            map.put("id = 1", " ");
            if (mail_configFind.byExist(map)) {
                sql = "UPDATE public.sistema_email  SET "
                        + "correo = '" + this.getCorreo().toLowerCase() + "',  "
                        + "clave = '" + getClave().toLowerCase() + "', "
                        + "puerto  = '" + getPuerto() + "' "
                        + "WHERE id=1";
                //Actualiza la información del registro
                persistencia.executeUpdate(sql);

            } else {
                sql = "INSERT INTO public.sistema_email (correo,clave,puerto) "
                        + "VALUES ("
                        + "'" + getCorreo() + "',  "
                        + "'" + getClave() + "', "
                        + "" + getPuerto() + ")";
                //Inserta la información del registro
                persistencia.executeUpdate(sql);
            }

            throw new Exc("m2");

        } catch (Exc ex) {
            msg.showMsg(namePackage(), "system", ex.getIdError());
        } catch (SQLException ex) {
            msg.showErr(namePackage(), "sql", ex);
        } catch (Exception ex) {
            msg.showErr(namePackage(), "java", ex);
        } finally {
        }
    }

    public void clear() {
        logged.setMasterId(0);
        clearBeans();
    }

    private String namePackage() {
        Package pack = this.getClass().getPackage();
        return pack.getName();
    }
}
